一默

April 18, 2010

说说GoF模式中的行为模式2

Filed under: Tech — admin @ 12:35 pm

2.Visitor模式
当你把不同的对象比如说String,Float丢到Collection类后,对象都成为Object,
以后遍历的时候如何对不同对象采取不同的操作?if else判断instanceof是最蠢的
办法,visitor模式的想法就是对String,Float等每一个可访问的对象都实现一个
公共接口:
interface CommonOperation {
public void operation(){
}
}
class StringElement implements CommonOperation {
public void operation() {
//自己的操作
}
}

class FloatElement一样
这样遍历collection的时候就可以通过((CommonOperation)iterator.next()).ope
ration()进行操作了,不过这里的缺点是一旦StringElement一定下来,他的操作也
就定了,也就是说客户无法自己更改操作
于是增加一级抽象,引入Visitor接口:
interface Visitor {
public void visitStringElement();
public void visitFloatElement();
}

然后改写CommandOperation和StringElement:
interface CommonOperation {
public void operation(Visitor v){
}
}
class StringElement implements CommonOperation {
public void operation(Visitor v) {
v.visitStringElement();
}
}

这样一来,你要搞不同的操作就实现Visitor接口后在visitXXX方法中实现自己的操
作就可以了
这个模式告诉我们:如果你想对一些对象进行某些公共操作而不怕引进新的类,就
用interface进行抽象(好像有点绕口),其实这也是Command,Strategy,Template Method的思想

No Comments »

No comments yet.

RSS feed for comments on this post. TrackBack URL

Leave a comment

Powered by WordPress